package com.telchina.utils;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 各类型数据计算
 */
public class CalculateUtil {

    /**
     * 同比计算
     * 同比增长速度=（本期数据-同期数据）÷同期数据×100%。
     *
     * @param yoyData  同期数据
     * @param thisData 本期数据
     * @return
     */
    public static Double yoyCalculate(Double yoyData, Double thisData) {
        if (Double.compare(yoyData, 0) != 0) {
            return (new BigDecimal(thisData).subtract(new BigDecimal(yoyData)))
                    .divide(new BigDecimal(yoyData), 4, RoundingMode.HALF_UP)
                    .multiply(new BigDecimal(100)).doubleValue();
        } else {
            return Double.compare(thisData, 0) == 0 ? 0.00 : 100.00;
        }

    }

    /**
     * 环比计算
     * 环比增长速度＝（本期数据－上期数据）÷上期数据×100%
     *
     * @param momData  上期数据
     * @param thisData 本期数据
     * @return
     */
    public static Double momCalculate(Double momData, Double thisData) {
        if (Double.compare(momData, 0) != 0) {
            return (new BigDecimal(thisData).subtract(new BigDecimal(momData)))
                    .divide(new BigDecimal(momData), 4, RoundingMode.HALF_UP)
                    .multiply(new BigDecimal(100)).doubleValue();
        } else {
            return Double.compare(thisData, 0) == 0 ? 0.00 : 100.00;
        }
    }

    /**
     * 占比计算
     *
     * @param molecule    分子
     * @param denominator 分母
     * @return
     */
    public static Double ratioCalculate(Integer molecule, Integer denominator) {
        if (Integer.compare(denominator, 0) != 0) {
            return new BigDecimal(molecule).divide(new BigDecimal(denominator), 4, RoundingMode.HALF_UP)
                    .multiply(new BigDecimal(100)).doubleValue();
        } else if (Integer.compare(molecule, 0) == 0) {
            return 0.00;
        } else {
            return 100.00;
        }
    }
}
